package middle;

/**
 * 给定一个含有n个正整数的数组和一个正整数 target 。
 *
 * 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组[numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。
 *
 * 链接：https://leetcode-cn.com/problems/minimum-size-subarray-sum
 * */
public class MinimumSizeSubarraySum {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.minSubArrayLen(4, new int[]{1,4,4});
    }
    /**
     * 滑动窗口法
     * */
    static class Solution {
        public int minSubArrayLen(int target, int[] nums) {
            int left = 0;
            int right = 0;
            int ans = Integer.MAX_VALUE;
            int sum = 0;
            while(right < nums.length){
                sum += nums[right++];

                while(sum >= target){
                    ans = Math.min(right - left, ans);
                    sum -= nums[left++];
                }
            }
            return ans == Integer.MAX_VALUE ? 0 : ans;
        }
    }
}
